﻿#ifndef MYOPENGLWIDGET_H
#define MYOPENGLWIDGET_H

#include <QKeyEvent>
#include <QOpenGLFunctions_3_3_Core>
#include <QOpenGLShaderProgram>
#include <QOpenGLTexture>
#include <QOpenGLWidget>
#include <QTime>
#include <QTimer>

/*
    1 镜像图片
        TexCord = vec2(1-aTexCord.s,aTexCord.t);// 画出的图片相当于镜像
    2 只获取图形的一部分
        0.9f,  0.9f,  0.0f, 1.0f, 0.0, 0.0, 0.55f, 0.55f, // top right
        0.9f,  -0.9f, 0.0f, 0.0f, 1.0, 0.0, 0.55f, 0.45f, // buttom right
        -0.9f, -0.9f, 0.0f, 0.0f, 0.0, 1.0, 0.45f, 0.45f, // buttom left
        -0.9f, 0.9f,  0.0f, 0.5f, 0.5, 0.5, 0.45f, 0.55f  // top left
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );              // 近-》远3
     3通过ratio改变透明度

*/

class MyOpenGLWidget : public QOpenGLWidget, QOpenGLFunctions_3_3_Core {
    Q_OBJECT
  public:
    enum Shape { None, Rect, Circle, Triangle };

    MyOpenGLWidget( QWidget *parent = nullptr );
    ~MyOpenGLWidget();

    void drawShape( Shape shape );
    void setWireframe( bool wireframe );

  protected:
    virtual void initializeGL();
    virtual void resizeGL( int w, int h );
    virtual void paintGL();
    virtual void keyPressEvent( QKeyEvent *event ) override;

  signals:

  public slots:
    void on_timerout();

  private:
    Shape                m_shape;
    QOpenGLShaderProgram m_shaderProgram;
    QOpenGLTexture *     m_textureWall;  // 1 步骤一
    QOpenGLTexture *     m_textureFreep; // 1 步骤一
    QOpenGLTexture *     m_textureSamll; // 1 步骤一

};

#endif // MYOPENGLWIDGET_H
